package com.bosssoft.user.permission.center.serve.service;

import com.bosssoft.user.permission.center.serve.pojo.dto.Id;
import com.bosssoft.user.permission.center.serve.pojo.dto.IdVersion;
import com.bosssoft.user.permission.center.serve.pojo.dto.SubSystemDTO;
import com.bosssoft.user.permission.center.serve.pojo.query.SubSystemQuery;
import common.data.commonresponse.CommonPage;

import javax.validation.Valid;
import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;

/**
 * @interfaceName: SubSystemService
 * @description: 定义了子系统管理业务的接口
 * @author: lanyukai
 * @date: 2024/6/11 16:57
 * @since 1.0
 **/
public interface SubSystemService {
    /**
     * 通过query查询体查询子系统信息, 根据子系统名、子系统编码、子系统备注查询
     * @author lanyukai
     * @date 2024/06/13 10:11
     * @param subSystemQuery 子系统信息查询体
     * @return 子系统信息
     */
    CommonPage<SubSystemDTO> selectSubSystemWithQuery(@NotNull @Valid SubSystemQuery subSystemQuery);

    /**
     * 通过子系统id获取子系统信息
     * @author lanyukai
     * @date 2024/06/13 13:53
     * @param id 子系统id
     * @return 对应子系统信息
     */
    SubSystemDTO selectSubSystemById(@NotNull @Valid Long id);

    /**
     * 新增子系统信息
     * @author lanyukai
     * @date 2024/06/13 15:10
     * @param subSystemDTO 子系统DTO信息
     * @return 是否新增成功
     */
    Boolean addSubSystem(@NotNull @Valid SubSystemDTO subSystemDTO);

    /**
     * 复制子系统信息
     * @author lanyukai
     * @date 2024/06/16 15:40
     * @param ids 被选中的id集合
     * @return 是否复制成功
     */
    Boolean copySubSystem(@NotNull @Valid Id[] ids);

    /**
     * 修改子系统信息
     * @author lanyukai
     * @date 2024/06/13 17:26
     * @param subSystemDTO 子系统DTO信息
     * @return 是否修改成功
     */
    Boolean updateSubSystem(@NotNull @Valid SubSystemDTO subSystemDTO);
    /**
     * 根据id删除子系统
     * @author lanyukai
     * @date 2024/06/13 17:29
     * @param id 子系统id
     * @return 是否删除成功
     */
    Boolean deleteSubSystemById(@NotNull Long id);

    /**
     * 根据id、版本信息删除多个子系统
     * @author lanyukai
     * @date 2024/06/13 19:55
     * @param ids 子系统id与版本集合
     * @return 是否删除成功
     */
    Boolean deleteSubSystemByIds(@NotEmpty @Valid Id[] ids);

    /**
     * 启用、停用子系统
     * @author lanyukai
     * @date 2024/06/13 19:56
     * @param id 子系统id
     * @return 是否停用/启用成功，已启用不可停用，停用可启用
     */
    Boolean setSubSystemStatus(@NotNull @Valid long id);

}
